package za.org.jcicada.cfgmngr;

import java.util.List;
import java.util.Set;

import za.org.jcicada.genss.PhysicalURN;
import za.org.jcicada.genss.SystemURN;
import za.org.jcicada.genss.messages.Result;
import za.org.jcicada.genss.sensor.SensorURN;

public interface IPhysicalClient {

	public enum Event {
		ADDED, REMOVED
	};

	void replyGetChildren(Result result, PhysicalURN parentURN, List<PhysicalURN> childrenURNs);
	
	void informViewSensor(String view, PhysicalURN physicalURN, SensorURN sensorURN);
	
	void replyViewSensors(Result result, String view, int number);
	
	void replyNodeSystems(Result result, PhysicalURN physicalURN, Set<SystemURN> systemURNs);
	
	void replyAttach(Result result);
	
	void replyDetach(Result result);
	
	/**
	 * Handle informs about view events
	 * 
	 * @param view
	 *            the name of the view
	 * @param event
	 *            has the view been added or removed
	 */
	void informViewEvent(String view, Event event);

	/**
	 * Notify the observer that it has been disconnected from the subject
	 */
	void informDisconnect();
}
